"->"和"."的区别

来源:百度知道 编辑:UC知道 时间:2024/06/24 08:40:34
调用类里面的成员函数的时候,使用"->"和"."显示的函数是不同的,
请问这两种方式有什么区别?

->运算符的左边操作数一般是指针,含义是引用指针指向对象的成员,.运算符左边操作数是引用或者类实例,含义是调用实例的成员。一般情况下,只有两个运算符中只有一个能用:

指针用->,引用和实例用.

例如
class A
{
public:
int GetA();
};

A * p;//指针
A a;//定义一个实例
A & r=a;//定义一个引用

//正确的写法
p->GetA();
a.GetA();
r.GetA();

其中p只能用->,如果写 p.GetA()则会出现编译错误,因为指针不能用.运算符。
同样,a和r只能用.,如果用->则会出现编译错误,例如r->GetA()是错误的。

如果有一个左边变量能够同时用->和.,说明->运算符被重载了。通常出现在stl的iterator中,比如

list<A>::iterator it;
it.operator++();
it->GetA();

stl的iterator是一个类,一般不要直接用.和->;因为.调用了iterator类本身的成员函数,实际上iterator本身的成员函数没什么用。而->运算符被重载了,用于调用iterator本身指向元素的成员,比如it作为一个迭带器当前指向一个list中的A的元素,那么it->GetA()就是调用这个A类型元素的成员。

一般来说对iterator只需要用->,不需要用.,一般认为用->可能会有兼容性问题。所以最用用*,也就是
(*it).GetA()。

->是智能指针,用处是希望定义一个类来保证这种类的对象总是指向另一个对象。
点就只是类中的函数或变量的调用。